package com.wangxin.study8.maps;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName MapsMain
 * @Description Map 类型不支持 streams，
 * 不过Map提供了一些新的有用的方法来处理一些日常任务。Map接口本身没有可用的 stream（）方法，
 * 但是你可以在键，值上创建专门的流或者通过
 * map.keySet().stream(),map.values().stream()和map.entrySet().stream()。
 * @Author jojo.wang
 * @Date 2019-04-25 15:58
 * @Version 1.0
 **/
public class MapsMain {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            //putIfAbsent 阻止我们在null检查时写入额外的代码
            map.putIfAbsent(i, "val" + i);
        }
        map.forEach((k,v)-> System.out.println(v));

        /**
         * computeIfAbsent的方法有两个参数 第一个是所选map的key，第二个是需要做的操作。这个方法当key值不存在时才起作用。
         */
        /**
         * computeIfPresent 的方法,对 指定的 在map中已经存在的key的value进行操作。只对已经存在key的进行操作，其他不操作
         */
        map.computeIfPresent(3,(num,val)->val+num);
        System.out.println(map.get(3));

        map.computeIfPresent(9,(k,v)->null);
        System.out.println(map.get(9));

        map.computeIfAbsent(23,v->"val"+v);
        System.out.println(map.get(23));

        map.computeIfAbsent(3,v->"bbb");
        System.out.println(map.get(3));


        /**
         * 如何在Map里删除一个键值全都匹配的项
         */
        map.remove(3,"val3");
        System.out.println(map.get(3));

        map.remove(3,"val33");
        System.out.println(map.get(3));

        map.getOrDefault(88,"not found");

        /**
         * Map的元素做合并
         */
        System.out.println(map.get(9));
        map.merge(9,"val9",(v,nv)->v.concat(nv));
        System.out.println(map.get(9));

        map.merge(9,"concat",(v,nv)->v.concat(nv));
        System.out.println(map.get(9));

    }
}
